var setting = {
	view : {
		selectedMulti : false
	},
	edit : {
		enable : false
	},
	data : {
		keep : {
			parent : false,
			leaf : false
		},
		simpleData : {
			enable : true,
			pIdKey : "parentid",
			rootPid : null
		}
	},
	callback : {
		beforeDrag : false,
		beforeRemove : false,
		beforeRename : false,
		onClick : menuClick
	}
}, setting2 = {
	view : {
		selectedMulti : false
	},
	edit : {
		enable : false
	},
	data : {
		keep : {
			parent : false,
			leaf : false
		},
		simpleData : {
			enable : true,
			pIdKey : "parentid",
			rootPid : null
		}
	}
}, zNodes, zNodes2, m_a_c=0, aNodes=[], uNodes=[], dNodes=[];
//获取菜单树
function getNodes() {
	$.ajax({
		url : "system/getAllMenus",
		async : false,
		timeout : 3000,
		dataType : "json",
		success : function(data) {
			if (data) {
				if (data.code == 100) {
					zNodes = data.message;
				} else {
					showAlert(data.message);
				}
			} else {
				showAlert("获取列表失败!");
			}
		},
		error : function() {
			showAlert("获取菜单失败!");
		}
	});
}
/**
 * 获取所有权限信息
 */
function getModule() {
	$.ajax({
		url : "system/getAllModule",
		async : false,
		timeout : 3000,
		dataType : "json",
		success : function(data) {
			if (data) {
				if (data.code == 100) {
					zNodes2 = data.message;
				} else {
					showAlert(data.message);
				}
			} else {
				showAlert("获取权限信息失败!");
			}
		},
		error : function() {
			showAlert("获取权限信息失败!");
		}
	});
}
function menuClick(e, treeId, treeNode){
	if(treeNode.level==1){
		parseNodeByPId(treeNode.id);
	}else{
		parseNodeByPId(-2);
		showAlert("仅子菜单可以添加权限!");
	}
}
/**
 * 根据ID获取原数据
 * @param id
 * @returns
 */
function parseNodeById(id){
	var t;
	for(var i=0;i<zNodes2.length;i++){
		t=zNodes2[i];
		if(t.id==id){
			return t;
		}
	}
	return null;
}
/**
 * 根据ID获取添加的数据
 * @param id
 * @returns
 */
function parseANodeById(id){
	var t;
	for(var i=0;i<aNodes.length;i++){
		t=aNodes[i];
		if(t.id==id){
			return t;
		}
	}
	return null;
}
/**
 * 获取更改后的节点
 * @param id
 * @returns
 */
function parseUNodeById(id){
	var t;
	for(var i=0;i<uNodes.length;i++){
		t=uNodes[i];
		if(t.id==id){
			return t;
		}
	}
	return null;
}
/**
 * 根据菜单ID获取权限信息
 * @param pId
 */
function parseNodeByPId(pId){
	var t, u="", id;
	for(var i=0;i<zNodes2.length;i++){
		t=zNodes2[i];
		if(t.menuId==pId){
			id=t.id;
			if(!$.isNumeric(id)){
				t=parseANodeById(id);
			}else{
				var tmp=parseUNodeById(id);
				if(tmp){
					t=tmp;
				}
			}
			u+="<tr class=\"unread checked\">";
			u+="<td class=\"hidden-xs\">";
			u+="<input type=\"checkbox\" class=\"checkbox\" value=\""+t.id+"\">";
			u+="</td>";
			u+="<td class=\"hidden-xs\">";
			u+=t.name;
			u+="</td>";
			u+="<td>";
			u+=t.permissionSign;
			u+="</td>";
			u+="</tr>";
		}
	}
	$("#tbody").html(u);
}
/**
 * 添加数据到更改数组,若已存在则更改
 * @param node
 */
function addNode2UNodes(node){
	var t;
	for(var i=0;i<uNodes.length;i++){
		t=uNodes[i];
		if(t.id==node.id){
			t.name=node.name;
			t.permissionSign=node.permissionSign;
			return;
		}
	}
	uNodes.push(node);
}
/**
 * 添加数据到新增数组,若已存在则更改
 * @param node
 */
function addNode2ANodes(node){
	var t;
	for(var i=0;i<aNodes.length;i++){
		t=aNodes[i];
		if(t.id==node.id){
			t.name=node.name;
			t.permissionSign=node.permissionSign;
			return;
		}
	}
	aNodes.push(node);
}
function addNode2DNodes(node){
	var t;
	for(var i=0;i<dNodes.length;i++){
		t=dNodes[i];
		if(t.id==node.id){
			t.name=node.name;
			t.permissionSign=node.permissionSign;
			return;
		}
	}
	dNodes.push(node);
}
/**
 * 删除zNodes2中的数据
 * @param id
 */
function del4ZNodes(id){
	var t;
	for(var i=0;i<zNodes2.length;i++){
		t=zNodes2[i];
		if(t.id==id){
			zNodes2.splice(i,1);
			break;
		}
	}
}
function del4ANodes(id){
	var t;
	for(var i=0;i<aNodes.length;i++){
		t=aNodes[i];
		if(t.id==id){
			aNodes.splice(i,1);
			break;
		}
	}
}
function del4UNodes(id){
	var t;
	for(var i=0;i<uNodes.length;i++){
		t=uNodes[i];
		if(t.id==id){
			uNodes.splice(i,1);
			break;
		}
	}
}
function addModule(){
	var treeObj = $.fn.zTree.getZTreeObj("treeDemo"),
	nodes = treeObj.getSelectedNodes()[0];
	if(nodes&&nodes.level==1){
		$('.modal-title').html("添加权限");
		showForm();
	}else{
		showAlert("请选择子菜单!");
	}
}
/**
 * 
 */
function showForm(){
	$("#permission_name_div").removeClass("has-error");
	$("#permission_sign_div").removeClass("has-error");
	$("#permission_name").val("");
	$("#permission_sign").val("");
	$("#permission_id").val("");
	$('#myModal').modal();
}
/**
 * 表单提交事件
 */
function formSubmit(){
	$("#permission_name_div").removeClass("has-error");
	$("#permission_sign_div").removeClass("has-error");
	var name=$.trim($("#permission_name").val()),
	sign=$.trim($("#permission_sign").val()),
	id=$("#permission_id").val();
	if(!name||name==''){
		$("#permission_name_div").addClass("has-error");
	}else if(!sign||sign==''){
		$("#permission_sign_div").addClass("has-error");
	}else{
		if(!id||id==""){
			//新增记录
			id='a_'+m_a_c++;
			var treeObj = $.fn.zTree.getZTreeObj("treeDemo"),
			nodes = treeObj.getSelectedNodes()[0],
			m={id:id,name:name, permissionSign:sign, menuId:nodes.id};
			zNodes2.push(m);
			addNode2ANodes(m);
			parseNodeByPId(nodes.id);
		}else{
			//修改记录
			var t=parseNodeById(id);
			if(!$.isNumeric(id)){
				//若为新增记录,更新aNodes中数据
				t.name=name;
				t.permissionSign=sign;
				addNode2ANodes(t);
			}else{
				//若为原数据,判断是否发生改变
				if(t.name!=name||t.permissionSign!=sign){
					t.name=name;
					t.permissionSign=sign;
					addNode2UNodes(t);
				}
			}
			parseNodeByPId(t.menuId);
		}
		$('#myModal').modal('hide');
	}
}
/**
 * 更改权限
 */
function updateModule(){
	var a=$(".checkbox:checked"),b,d;
	if(a&&a.length==1){
		b=$(a[0]).val();
		d=parseNodeById(b);
		if(d){
			$('.modal-title').html("修改权限");
			showForm();
			$("#permission_id").val(d.id);
			$("#permission_name").val(d.name);
			$("#permission_sign").val(d.permissionSign);
		}
	}else{
		showAlert("请选择一条记录!");
	}
}
/**
 * 删除权限
 */
function deleteModule(){
	var a=$(".checkbox:checked"), id;
	if(a&&a.length>0){
		for(var i=0;i<a.length;i++){
			id=$(a[i]).val();
			if(!$.isNumeric(id)){
				//新增记录
				del4ANodes(id);
			}else{
				//原记录
				del4UNodes(id);
				//记入删除数组
				addNode2DNodes(parseNodeById(id));
			}
			del4ZNodes(id);
		}
		var treeObj = $.fn.zTree.getZTreeObj("treeDemo"),
		nodes = treeObj.getSelectedNodes()[0];
		parseNodeByPId(nodes.id);
	}else{
		showAlert("请至少选择一条记录!");
	}
}
function saveModule(){
	if(aNodes.length+uNodes.length+dNodes.length<1){
		showAlert("未发生更改!");
		return;
	}
	var data=[], nNodes=[];
	$.each(aNodes, function(i,n){
		var z={id:null,name:n.name, permissionSign:n.permissionSign, menuId:n.menuId};
		nNodes.push(z);
	});
	data.push(nNodes);
	data.push(uNodes);
	data.push(dNodes);
	$.ajax({
		url: "system/changeModule",
		type: "POST",
		async: false,
		timeout: 3000,
		data: {"permission":JSON.stringify(data)},
		dataType: "json",
		success: function(data){
			if(data){
				if(data.code==100){
					aNodes=[];uNodes=[];dNodes=[];
					getModule();
					showSuccess("保存成功!");
				}else{
					showAlert(data.message);
				}
			}else{
				showAlert("菜单保存失败!");
			}
		},
		error: function(){
			showAlert("菜单保存失败!");
		}
	});
}
$(document).ready(function() {
	getNodes();
	getModule();
	$.fn.zTree.init($("#treeDemo"), setting, zNodes);//
	$("#addMenu").bind("click", addModule);
	$("#permission_form").bind("click", formSubmit);
	$("#updateMenu").bind("click", updateModule);
	$("#remove").bind("click", deleteModule);
	$("#saveMenu").bind("click", saveModule);
});